﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
//struct的对齐规则
struct S
{
	char a;
	int b;
	char n;
};
int main()
{
	struct S s3;
	printf("%d ", sizeof(struct S));
	return 0;
}

struct S s3
{
	char a;
	int b;
	char n;
};



struct S4
{
	char c1;
	struct S3 s3;
	double d;
};
int main()
{
	struct S s4;
	printf("%d ", sizeof(struct S4));
	return 0;
}


//联合体的创建和初始化：
union Un
{
	char c;
	int a;
};
int mian()
{
	//联合体变量的定义
	union Un un = { 0 };
	//计算连个变量的大小
	printf("%d\n", sizeof(un));
	return 0;
}





//联合体大小的计算
//我们要搞⼀个活动，要上线⼀个礼品兑换单，礼品兑换单中有三种商品：图书、杯⼦、衬衫。
//每⼀种商品都有：库存量、价格、商品类型和商品类型相关的其他信息。
//图书：书名、作者、⻚数
//杯⼦：设计
//衬衫：设计、可选颜色、可选尺寸
struct gift_list
{
	int kucun_liang;//库存量
	char jia_ge;//价格
	int item_type;//商品类型
	union
	{
		struct
		{
			char title[20];//书名
			int name[10];//作者
			char num_pager;//页数
		}book;
		struct
		{
			char desight[30];//设计
		}mug;
		struct
		{
			char desight[20];//设计
			int jian_se;//可选颜色
			int size;//可选尺寸
		}shirt;
	}item;
};



//struct传参

struct S
{
	int data[1000];
	int num;
};
struct S s = { {1,2,3,4}, 1000 };
//结构体传参 
void print1(struct S s)
{
	printf("%d\n", s.num);
}
//结构体地址传参 
void print2(struct S* ps)
{
	printf("%d\n", ps->num);
}

int mian()
{
	print1(s); //传结构体 
	print2(&s); //传地址 
	return 0;
}








